<?php


require_once ('X509Certificate.php');

/**
 * Classe responsvel pelo tratamento de rotinas relacionadas  certificao digital
 *
 * @name WebserviceNfe
 * @author Mauro Porto 14/10/2013 08:55:00
 * @package Webservice
 * @version $Id: NfeAssinaturaDigital.php,v 1.30 2013/10/14 16:50:30 mauro.porto Exp $
 */
class NfeAssinaturaDigital {

    /**
     * Url do schema utilizado pela assinatura digital do arquivo xml
     *
     * @var resource $urlDsig
     * @access private
     */
    private $certificadoDigital;

    /**
     * Url do schema utilizado pela assinatura digital do arquivo xml
     *
     * @var resource $urlDsig
     * @access private
     */
    private $xmlSignature;

    /**
     * Mtodo construtor da classe
     *
    */
    public function __construct()
    {
 
        $this->xmlSignature         =   new Signature;

        $this->certificadoDigital   =   new X509Certificate;

        $this->certificadoDigital->loadFromFile(getenv("CERTIFICADO_SISTEMA"));
        $this->certificadoDigital->loadPkeyFromFile(getenv("CERTIFICADO_SISTEMA_KEY"), getenv("CERTIFICADO_SISTEMA_KEY_PASSH"));

        $this->certificadoDigital->setCaminhoCA(getenv("DIR_VALIDACAO_CA"));
    }

    /**
     * Getter da variavel $tipoErroassinatura
     *
     * @name getTipoerroassinatura
     * @access public
     * @return String
     */
    public function getTipoerroassinatura()
    {
    	return $this->xmlSignature->getTipoerroassinatura();
    }
    
    /**
     * Funo genrica para validao da assinatura em um nodo XML
     *
     * @name validaAssinaturaOut
     * @access public
     * @param object $Element
     * @return bool
     */
    public function validaAssinaturaOut(DOMElement $Element)
    {
    	return $this->xmlSignature->validaAssinaturaOut($Element);
    }
    
    /**
     * Funo genrica para assinatura de um nodo
     *
     * @name assinaElementoDOM
     * @access public
     * @param Object $objDocumento
     * @param $idElementoAssinado $string
     * @return Object
     */
    public function assinaElementoDOM(DOMDocument $objDocumento, $idElementoAssinado)
    {
    	try
    	{
    		return $this->xmlSignature->assinaElementoDOM($objDocumento, $idElementoAssinado, $this->certificadoDigital);
    	} catch (ExceptionNfs $e){
    		$e->setExcecao("Assinatura","Falha na assinatura do elemento");
    		return false;
    	}
    }
    
    /**
     * Mtodo para verificao da regra de negcios referente ao Certificado digital
     *
     * @name verificaCertificadoDigital
     * @access public
     * @param string $strCertificado
     * @return bool
     */
    public function verificaCertificadoDigital($strCertificado)
    {
    	return $this->certificadoDigital->verificaCertificadoDigital($strCertificado);
    }
    
    
    /**
     * Mtodo para verificao da regra de negcios referente ao Certificado digital
     *
     * @name getUrlDsig
     * @access public
     * @return bool
     */
    public function getUrlDsig()
    {
    	return $this->xmlSignature->getUrlDsig();
    }
    
    }
